iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 4

Day 4 - 資料型態介紹:Array & Hash

  • 分享至 

  • xImage
  •  

在學習初期,一直搞不懂 Array 與 Hash 的差異在哪裡,到後來學到資料結構的設計方法後,漸漸能夠了解這兩個的特性是什麼,也知道如何做結合運用。

簡單地區分,Array 存取資料的方式是重視順序的,而 Hash 有 key 與 value 的對應關係,所以順序不會影響取值的問題。

Array 陣列

陣列的表示方式為:

languages = ["ruby" , "php" , "Javascript" , "python"]
snack = %w(cake cookie donut candy)
p languages
p snack

# 執行結果
# ["ruby", "php", "Javascript", "python"]
# ["cake", "cookie", "donut", "candy"]

取值:

1. 在取值時,可用索引值(index)來取用,而ruby的索引值是從0開始計算。

languages = ["ruby" , "php" , "Javascript" , "python"]
puts languages[0]
# 執行結果 ruby

也就是說,通常在取值時,我們習慣說第 1 個值是 ruby,但在 Ruby 這個程式語言的第 0 個值才是取到 ruby 喔!

2. 也可以使用first、last取值

需要注意的是ruby只有firstlast
而rails還有額外的方法(secondthird...)可以取值

snack = %w(cake cookie donut candy)
puts snack.last
#執行結果 candy

新增、更改陣列裡的值

使用<<來把值塞入原有的陣列中

brand = ["apple","asus","acer","msi"]
brand << "ph"
p brand
# 執行結果 ["apple", "asus", "acer", "msi", "ph"]

使用來更改原有陣列中的值

brand = ["apple","asus","acer","msi"]
brand[1] = "ph"
p brand
# 執行結果 ["apple", "ph", "acer", "msi", "ph"]

Hash 雜湊

hash是什麼? (key and value)

類似 Python 中的 Dictionary ; Javascript 中的 Object
不論是 Hash、Dictionary、Object 都有一個 key 和一個 value,稱為「鍵值對」
hash = { key1: value1, key2: value2 }
這樣設計的好處是,可以把 key 當作索引值(index)使用,透過索引值,可以用找對應到的 value,所以才說 hash 與 array 不同的地方在於順序問題

有兩種寫法:

箭頭式(舊式):

product_old = { :name => "apple", :price => 35 }

類似JSON格式(新式):

product_new = { name: "apple", price: 35 }

取hash中的內容

還記得我昨天最後面提到的symbol適合拿來當作hash的key嗎?

cat = { name:"nancy", age:2, weight:7, kind:mix }
puts cat[:name]
puts cat[:weight]

# 執行結果
# nancy
# 7

所以hash取值的方式,就是用key來當索引值,而這個索引值的資料型態就是symbol!如此一來就可以拿到貓咪的名字和體重啦~

但是有時候hash存放了太多資料,一時之間找不到自己有哪些key可以使用時,那就叫出所有key吧:

p cat.keys

# 執行結果 [:name, :age, :weight, :kind]

看到這裡,你應該也可以猜想到,既然可以取所有的key,想當然也可以取得所有的value囉~

p cat.values

# 執行結果 ["nancy", 2, 7, "mix"]

接下來就來說明昨天欠的「為什麼 hash 的 key 用 symbol 比 string 適合」,明天見~

參考資料:
為你自己學Ruby on Rails-高見龍

學無止盡,每天都要進步一點點!


上一篇
Day 3 - 資料型態介紹:String & Symbol
下一篇
Day 5 - 資料結構
系列文
關於 Ruby on Rails 的那些事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言